#include <stdio.h>
#include <stdlib.h>

unsigned char SpiReverseBitOrder(unsigned short va)
{
    /*1149:	55                   	push   %rbp
    114a:	48 89 e5             	mov    %rsp,%rbp
    114d:	89 f8                	mov    %edi,%eax		// eax = va
    114f:	66 89 45 ec          	mov    %ax,-0x14(%rbp)*/
	unsigned char vb;
		
    /*1153:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax	// eax = va
    1157:	c1 e0 07             	shl    $0x7,%eax		// eax = va << 7
    115a:	89 c2                	mov    %eax,%edx		// edx = va << 7

    115c:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax	// va
    1160:	c1 e0 05             	shl    $0x5,%eax		// eax = va << 0x5
    1163:	83 e0 40             	and    $0x40,%eax		// eax = (va<<0x5) & 0x40
    1166:	09 c2                	or     %eax,%edx		// edx = ((va<<0x5) & 0x40)| (va << 7)*/

    /*1168:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax	// va
    116c:	c1 e0 03             	shl    $0x3,%eax		// eax = va << 3
    116f:	83 e0 20             	and    $0x20,%eax		// eax = (va<<3) & 0x20
    1172:	09 c2                	or     %eax,%edx		// edx= ((va<<3) & 0x20) | ((va<<0x5) & 0x40)| (va << 7)

    1174:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax	// va
    1178:	01 c0                	add    %eax,%eax		// eax=va+va
    117a:	83 e0 10             	and    $0x10,%eax		// eax=(va+va)&0x10
    117d:	09 c2                	or     %eax,%edx		// edx=((va+va)&0x10)|((va<<3) & 0x20) | ((va<<0x5) & 0x40)| (va << 7)

    117f:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax	// exa=va
    1183:	d1 f8                	sar    %eax				// eax=(va>>1)
    1185:	83 e0 08             	and    $0x8,%eax		// eax=(va>>1)&0x8
    1188:	09 c2                	or     %eax,%edx		// edx=((va>>1)&0x8)|((va+va)&0x10)|((va<<3) & 0x20) | ((va<<0x5) & 0x40)| (va << 7)

    118a:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
    118e:	c1 f8 03             	sar    $0x3,%eax
    1191:	83 e0 04             	and    $0x4,%eax
    1194:	09 c2                	or     %eax,%edx	// edx=(va>>3)&0x4)|((va>>1)&0x8)|((va+va)&0x10)|((va<<3) & 0x20) | ((va<<0x5) & 0x40)| (va << 7)

    1196:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
    119a:	c1 f8 05             	sar    $0x5,%eax
    119d:	83 e0 02             	and    $0x2,%eax
    11a0:	09 c2                	or     %eax,%edx	// edx=(va>>5)&0x2)|(va>>3)&0x4)|((va>>1)&0x8)|((va+va)&0x10)|((va<<3) & 0x20) | ((va<<0x5) & 0x40)| (va << 7)

    11a2:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
    11a6:	c1 f8 07             	sar    $0x7,%eax
    11a9:	83 e0 01             	and    $0x1,%eax
    11ac:	09 d0                	or     %edx,%eax */ // edx=(va>>7)&0x1)|(va>>5)&0x2)|(va>>3)&0x4)|((va>>1)&0x8)|((va+va)&0x10)|((va<<3) & 0x20) | ((va<<0x5) & 0x40)| (va << 7)

	vb = (va << 7) | ((va<<0x5) & 0x40) | ((va<<3) & 0x20) | ((va<<1)&0x10) |
		 ((va>>1)&0x8) | ((va>>3)&0x4) | ((va>>5)&0x2) | ((va>>7)&0x1);

    /*11ae:	88 45 ff             	mov    %al,-0x1(%rbp)
    11b1:	0f b6 45 ff          	movzbl -0x1(%rbp),%eax
    11b5:	5d                   	pop    %rbp
    11b6:	c3                   	retq   */
	return vb;
}

int main(int argc, char *argv[])
{
    /*11b7:	f3 0f 1e fa          	endbr64 
    11bb:	55                   	push   %rbp
    11bc:	48 89 e5             	mov    %rsp,%rbp
    11bf:	48 83 ec 20          	sub    $0x20,%rsp
    11c3:	89 7d ec             	mov    %edi,-0x14(%rbp)
    11c6:	48 89 75 e0          	mov    %rsi,-0x20(%rbp)

    11ca:	bf 34 00 00 00       	mov    $0x34,%edi
    11cf:	e8 75 ff ff ff       	callq  1149 <SpiReverseBitOrder>*/
		int a;

		a = SpiReverseBitOrder(0x34);

    /*11d4:	0f b6 c0             	movzbl %al,%eax
    11d7:	89 45 fc             	mov    %eax,-0x4(%rbp)
    11da:	8b 45 fc             	mov    -0x4(%rbp),%eax
    11dd:	89 c2                	mov    %eax,%edx
    11df:	be 17 00 00 00       	mov    $0x17,%esi
    11e4:	48 8d 3d 19 0e 00 00 	lea    0xe19(%rip),%rdi        # 2004 <_IO_stdin_used+0x4>
    11eb:	b8 00 00 00 00       	mov    $0x0,%eax
    11f0:	e8 5b fe ff ff       	callq  1050 <printf@plt>*/
		printf("%d:0x%x\n", 0x17, a);

    /*11f5:	90                   	nop
    11f6:	c9                   	leaveq 
    11f7:	c3                   	retq   
    11f8:	0f 1f 84 00 00 00 00 	nopl   0x0(%rax,%rax,1)
    11ff:	00 */
	return 0;
}
